package cn.bugstack.springframework.context.event;

import cn.bugstack.springframework.beans.factory.BeanFactory;
import cn.bugstack.springframework.context.ApplicationEvent;
import cn.bugstack.springframework.context.ApplicationListener;

/**
 * 一个简单的应用事件广播器，继承自AbstractApplicationEventMulticaster。
 * 主要用于将应用事件广播给所有的监听器。
 */
public class SimpleApplicationEventMulticaster extends AbstractApplicationEventMulticaster {

    /**
     * 构造函数，初始化时注入BeanFactory。
     * @param beanFactory 用于获取应用事件监听器的BeanFactory。
     */
    public SimpleApplicationEventMulticaster(BeanFactory beanFactory) {
        setBeanFactory(beanFactory);
    }

    /**
     * 广播给定的事件给所有监听该事件类型的监听器。
     * @param event 要广播的应用事件。
     */
    @SuppressWarnings("unchecked")
    @Override
    public void multicastEvent(final ApplicationEvent event) {
        // 遍历并调用所有监听该事件的监听器
        for (final ApplicationListener listener : getApplicationListeners(event)) {
            listener.onApplicationEvent(event);
        }
    }

}
